﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.CONEXION;
using Cotizav.CONTROLADOR;
using Cotizav.PRESENTACION.DialogBox;

namespace Cotizav.PRESENTACION.Equipo
{
    public partial class AgregarEquipoVenta : Form
    {
        private COTIZACION_DETALLE result;
        private COTIZACION_DETALLE cotDetBase;

        private EQUIPO selectedEquipo;
        private List<CARACTERISTICA> selectedListCaracteristica;
        private LISTA_TARIFA selectedListaTarifa;

        private CtrlEquipo ctEquipo;
        private CtrlCaracteristica ctCaracteristica;
        private CtrlListaTarifa ctListaTarifa;

        private string igv;
        private string tipoCambio;
        private string moneda;

        public COTIZACION_DETALLE Result
        {
            get { return result; }
            set { result = value; }
        }

        public AgregarEquipoVenta()
        {
            InitializeComponent();

            selectedEquipo = new EQUIPO();
            selectedListCaracteristica = new List<CARACTERISTICA>();
            selectedListaTarifa = new LISTA_TARIFA();

            ctEquipo = new CtrlEquipo();
            ctCaracteristica = new CtrlCaracteristica();
            ctListaTarifa = new CtrlListaTarifa();
        }

        public AgregarEquipoVenta(string ig, string tc, string mon) : this()
        {
            igv = ig;
            tipoCambio = tc;
            moneda = mon;
        }

        public AgregarEquipoVenta(COTIZACION_DETALLE cotDet, string ig ,string tc, string mon) : this()
        {
            cotDetBase = new COTIZACION_DETALLE();
            cotDetBase = cotDet;

            igv = ig;
            tipoCambio = tc;
            moneda = mon;
        }

        private void AgregarEquipoVenta_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(moneda) && !string.IsNullOrWhiteSpace(tipoCambio))
            {
                txtIgv.Text = igv;
                txtMoneda.Text = moneda;
                txtTipocambio.Text = tipoCambio;

                if (cotDetBase != null) //se agrega una alternativa
                {
                    selectedEquipo = ctEquipo.getEquipo(cotDetBase.idEquipo);
                    selectedListCaracteristica = ctCaracteristica.getListCaracteristicas(cotDetBase.idEquipo);
                    txtBusqueda.Text = cotDetBase.nombreEquipo;

                    //rellenamos las caracteristicas
                    gridEspecTecnicas.DataSource = null;
                    gridEspecTecnicas.DataSource = selectedListCaracteristica;

                    txtSerie.Text = cotDetBase.serieEquipo;
                    txtAnio.Text = cotDetBase.anio;
                    txtCantidad.Text = cotDetBase.cantidad.Value.ToString();
                    txtTarifa.Text = cotDetBase.tarifa.Value.ToString("N");
                }
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            DialogSearchObject buscarEquipo = new DialogSearchObject("Equipo");
            if (buscarEquipo.ShowDialog(this) == DialogResult.OK)
            {
                string idEquipo = buscarEquipo.ResultadoBusqueda;

                if (!string.IsNullOrWhiteSpace(idEquipo))
                {
                    selectedEquipo = ctEquipo.getEquipo(idEquipo);
                    selectedListCaracteristica = ctCaracteristica.getListCaracteristicas(idEquipo);
                    selectedListaTarifa = ctListaTarifa.getListTarifa(idEquipo);

                    txtBusqueda.Text = selectedEquipo.nombreEquipo;

                    //rellenamos las caracteristicas
                    gridEspecTecnicas.DataSource = null;
                    gridEspecTecnicas.DataSource = selectedListCaracteristica;

                    //las tarifas se muestran al seleccionar el tipo de tarifas                  
                    this.setReadOnlyRows();
                    this.limpiarControles();
                }
            }
        }

        private void limpiarControles()
        {
            txtSerie.ResetText();
            txtHoras.ResetText();
            txtAnio.ResetText();
            txtCantidad.ResetText();
            txtTarifa.ResetText();
            txtValorIGV.ResetText();
            txtPrecioVenta.ResetText();
        }

        internal void setReadOnlyRows()
        {
            if (gridEspecTecnicas.Rows.Count > 0)
            {
                foreach (DataGridViewRow dr in gridEspecTecnicas.Rows)
                {
                    dr.ReadOnly = true;
                }
            }
        }

        private void gridEspecTecnicas_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridEspecTecnicas.DataSource != null)
            {
                gridEspecTecnicas.Columns["idCaracteristica"].Visible = false;
                gridEspecTecnicas.Columns["nombreCaracteristica"].HeaderText = "Característica";
                gridEspecTecnicas.Columns["descripcion"].HeaderText = "Descripción";
                gridEspecTecnicas.Columns["idequipo"].Visible = false;
                gridEspecTecnicas.Columns["eliminado"].Visible = false;
                gridEspecTecnicas.Columns["statusflag"].Visible = false;
                gridEspecTecnicas.Columns["EQUIPO"].Visible = false;
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            //verificamos que los campos esten rellenados
            if (!string.IsNullOrWhiteSpace(selectedEquipo.idEquipo))
            {
                if (!string.IsNullOrWhiteSpace(txtSerie.Text))
                {
                    if (!string.IsNullOrEmpty(txtHoras.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtAnio.Text))
                        {
                            if (!string.IsNullOrWhiteSpace(txtCantidad.Text))
                            {
                                if (!string.IsNullOrWhiteSpace(txtTarifa.Text))
                                {
                                    result = new COTIZACION_DETALLE()
                                    {
                                        idEquipo = selectedEquipo.idEquipo,
                                        nombreEquipo = selectedEquipo.nombreEquipo,
                                        codigoEquipo = selectedEquipo.codigo,
                                        moneda = moneda,
                                        eliminado = 0,

                                        serieEquipo = txtSerie.Text,
                                        horasEquipo = Convert.ToInt32(txtHoras.Text),
                                        anio = txtAnio.Text,
                                        cantidad = Convert.ToInt32(txtCantidad.Text),

                                        horaTarifa = 0,
                                        montoTarifa = 0,
                                        montoTarifaLoc = 0,
                                        montoTarifaExt = 0,

                                        tarifa = Convert.ToDecimal(txtTarifa.Text),
                                        tarifaLoc = moneda == "Local" ? Convert.ToDecimal(txtTarifa.Text) : Convert.ToDecimal(Convert.ToDouble(txtTarifa.Text) * Convert.ToDouble(tipoCambio)),
                                        tarifaExt = moneda == "Extranjera" ? Convert.ToDecimal(txtTarifa.Text) : Convert.ToDecimal(Convert.ToDouble(txtTarifa.Text) / Convert.ToDouble(tipoCambio)),

                                        dscto = 0,
                                        dsctoLoc = 0,
                                        dsctoExt = 0,

                                        impuestos = Convert.ToDecimal(txtValorIGV.Text),
                                        impuestosLoc = moneda == "Local" ? Convert.ToDecimal(txtValorIGV.Text) : Convert.ToDecimal(Convert.ToDouble(txtValorIGV.Text) * Convert.ToDouble(tipoCambio)),
                                        impuestosExt = moneda == "Extranjera" ? Convert.ToDecimal(txtValorIGV.Text) : Convert.ToDecimal(Convert.ToDouble(txtValorIGV.Text) / Convert.ToDouble(tipoCambio)),

                                        tarifaTotal = Convert.ToDecimal(txtPrecioVenta.Text),
                                        tarifaTotalLoc = moneda == "Local" ? Convert.ToDecimal(txtPrecioVenta.Text) : Convert.ToDecimal(Convert.ToDouble(txtPrecioVenta.Text) * Convert.ToDouble(tipoCambio)),
                                        tarifaTotalExt = moneda == "Extranjera" ? Convert.ToDecimal(txtPrecioVenta.Text) : Convert.ToDecimal(Convert.ToDouble(txtPrecioVenta.Text) / Convert.ToDouble(tipoCambio))
                                    };
                                }
                                else
                                {
                                    MessageBox.Show(this, "Ingrese campo de Precio de venta", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show(this, "Ingrese campo de cantidad", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show(this, "Ingrese campo de año", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show(this, "Ingrese campo de horas", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show(this, "Ingrese campo de serie", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show(this, "Seleccione el equipo a cotizar", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void calcularIgv()
        {
            if (!string.IsNullOrWhiteSpace(txtTarifa.Text))
            {
                txtValorIGV.Text = (Convert.ToDouble(txtTarifa.Text) * 0.18).ToString("N");
            }
            else
            {
                txtValorIGV.Text = Convert.ToDouble("0").ToString("N");
            }
        }

        private void calcularPrecioVenta()
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(txtValorIGV.Text))
                {
                    txtPrecioVenta.Text = (Convert.ToDouble(txtTarifa.Text) + Convert.ToDouble(txtValorIGV.Text)).ToString("N");
                }
                else
                {
                    if (!string.IsNullOrWhiteSpace(txtTarifa.Text))
                    {
                        txtPrecioVenta.Text = txtTarifa.Text;
                    }
                }
            }
            catch (FormatException)
            {
                if (string.IsNullOrWhiteSpace(txtTarifa.Text))
                {
                    txtTarifa.Text = string.Empty;
                    txtValorIGV.Text = Convert.ToDouble("0").ToString("N");
                    txtPrecioVenta.Text = Convert.ToDouble("0").ToString("N");
                }
            }
        }

        private void txtTarifa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtTarifa_KeyUp(object sender, KeyEventArgs e)
        {
            this.calcularIgv();
            this.calcularPrecioVenta();
        }
    }
}
